/**
 * Software License, Version 1.0 Copyright 2003 The Trustees of Indiana
 * University. All rights reserved. Redistribution and use in source and binary
 * forms, with or without modification, are permitted provided that the
 * following conditions are met: 1) All redistributions of source code must
 * retain the above copyright notice, the list of authors in the original source
 * code, this list of conditions and the disclaimer listed in this license; 2)
 * All redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the disclaimer listed in this license in the
 * documentation and/or other materials provided with the distribution; 3) Any
 * documentation included with all redistributions must include the following
 * acknowledgement: "This product includes software developed by the Community
 * Grids Lab. For further information contact the Community Grids Lab at
 * http://communitygrids.iu.edu/." Alternatively, this acknowledgement may
 * appear in the software itself, and wherever such third-party acknowledgments
 * normally appear. 4) The name Indiana University or Community Grids Lab or
 * NaradaBrokering, shall not be used to endorse or promote products derived
 * from this software without prior written permission from Indiana University.
 * For written permission, please contact the Advanced Research and Technology
 * Institute ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202. 5)
 * Products derived from this software may not be called NaradaBrokering, nor
 * may Indiana University or Community Grids Lab or NaradaBrokering appear in
 * their name, without prior written permission of ARTI. Indiana University
 * provides no reassurances that the source code provided does not infringe the
 * patent or any other intellectual property rights of any other entity. Indiana
 * University disclaims any liability to any recipient for claims brought by any
 * other entity based on infringement of intellectual property rights or
 * otherwise. LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH
 * NO WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY
 * GIVES NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF
 * INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS.
 * INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS",
 * "VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.
 * LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR
 * ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION
 * GENERATED USING SOFTWARE.
 */
package cgl.narada.transport.http;

import java.util.Properties;

import cgl.narada.transport.Link;
import cgl.narada.transport.TransportException;
import cgl.narada.transport.sslHttpBase.LinkFactoryImpl;
import cgl.narada.transport.sslHttpBase.LinkImpl;
import cgl.narada.transport.sslHttpBase.Transport;
import cgl.narada.util.logging.Logger;
import cgl.narada.util.logging.LoggerFactory;

/**
 * @author Hongbin Liu, John Yin $Date$ $Revision$
 */

public class HTTPLinkFactory extends LinkFactoryImpl {

	final static Logger log = LoggerFactory.getLogger(HTTPLinkFactory.class
			.getName());

	public final static String CHANNEL_TYPE = "http";

	/**
	 * 
	 */
	public HTTPLinkFactory() {
		super(new HTTPTransportFactoryImpl(), CHANNEL_TYPE);
	}

	public void setLinkFactoryProperties(Properties factoryProperties) {
		m_factory.setProperties(factoryProperties);
	}

	/**
	 * 
	 */
	public String getManagedLinksType() {
		return CHANNEL_TYPE;
	}

	/**
	 *
	 */
	public boolean canManageLinkMigrationOfType(String linkType) {
		return linkType.equals(CHANNEL_TYPE);
	}

	/**
	 *
	 */
	public void manageLinkMigration(Link link) throws TransportException {
		if (!(link instanceof LinkImpl)) {
			log.error("Unable to migrate link type: " + link.getLinkType()
					+ " to " + CHANNEL_TYPE);
			return;
		}

		LinkImpl c = (LinkImpl) link;
		Transport transport = c.getTransport();

		Properties p = c.getCreationProperties();

		createLink(p);

		// Link Migration.
		link.closeLink();
	}
}
